﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace Iudicium.Servicio.CRN
{
    /// <summary>
    /// Summary description for ResponsableCRn
    /// </summary>
    public class ResponsableCRN
    {
	    public ResponsableCRN()
	    {
		    //
		    // TODO: Add constructor logic here
		    //
	    }

        public static List<Responsable> GetResponsablesActivosByServicioId(int servicioId)
        {
            if (servicioId <= 0)
            {
                throw new ArgumentException("ServicioId no puede ser menor igual que cero.");
            }

            ResponsableDSTableAdapters.ResponsablesTableAdapter adapter = new ResponsableDSTableAdapters.ResponsablesTableAdapter();

            ResponsableDS.ResponsablesDataTable tabla = adapter.GetResponsablesActivosByServicioId(servicioId);

            if (tabla == null)
            {
                throw new Exception("El SQL se ejecuto correctamente pero devolvio un conjunto de datos nulo");
            }

            List<Responsable> lista = new List<Responsable>();

            foreach (ResponsableDS.ResponsablesRow row in tabla)
            {
                Responsable obj = ConstruirResponsable(row);
                lista.Add(obj);
            }
            return lista;
        }

        public static void InsertResponsableActivo(Responsable objResponsable)
        {
            if (objResponsable.ServicioId <= 0)
            {
                throw new ArgumentException("ServicioId no puede ser menor o igual que cero.");
            }

            if (objResponsable.AdministrativoId <= 0)
            {
                throw new ArgumentException("AdministrativoId no puede ser menor o igual que cero.");
            }

            if (objResponsable.FechaInicio == null)
            {
                throw new ArgumentException("FechaInicio no puede ser nula.");
            }

            ResponsableDSTableAdapters.ResponsablesTableAdapter adapter = new ResponsableDSTableAdapters.ResponsablesTableAdapter();
            adapter.InsertResponsableActivo(objResponsable.ServicioId, objResponsable.AdministrativoId, objResponsable.FechaInicio);
        }

        public static void InsertResponsableInactivo(Responsable objResponsable)
        {
            if (objResponsable.ServicioId <= 0)
            {
                throw new ArgumentException("ServicioId no puede ser menor o igual que cero.");
            }

            if (objResponsable.AdministrativoId <= 0)
            {
                throw new ArgumentException("AdministrativoId no puede ser menor o igual que cero.");
            }

            if (objResponsable.FechaFin == null)
            {
                throw new ArgumentException("FechaFin no puede ser nula.");
            }

            ResponsableDSTableAdapters.ResponsablesTableAdapter adapter = new ResponsableDSTableAdapters.ResponsablesTableAdapter();
            adapter.InsertResponsableInactivo(objResponsable.ServicioId, objResponsable.AdministrativoId, objResponsable.FechaFin);
        }

        public static void EliminarResponsableActivo(int servicioId, int administrativoId)
        {
            if (servicioId <= 0)
            {
                throw new ArgumentException("ServicioId no puede ser menor o igual que cero.");
            }

            if (administrativoId <= 0)
            {
                throw new ArgumentException("AdministrativoId no puede ser menor o igual que cero.");
            }

            ResponsableDSTableAdapters.ResponsablesTableAdapter adapter = new ResponsableDSTableAdapters.ResponsablesTableAdapter();
            adapter.DeleteResponsableActivo(servicioId, administrativoId);
        } 

        private static Responsable ConstruirResponsable(ResponsableDS.ResponsablesRow row)
        {
            return new Responsable(row.responsableId, row.servicioId, row.personaId, row.nombre, row.fechaInicio, row.IsfechaFinNull() ? DateTime.Now : row.fechaFin, Responsable.GetEstadoResponsableFromString(row.estado));
        }
    }
}